add_library(vixl
  include/vixl/assembler-base-vixl.h
  include/vixl/code-buffer-vixl.h
  include/vixl/code-generation-scopes-vixl.h
  include/vixl/compiler-intrinsics-vixl.h
  include/vixl/cpu-features.h
  include/vixl/globals-vixl.h
  include/vixl/invalset-vixl.h
  include/vixl/macro-assembler-interface.h
  include/vixl/platform-vixl.h
  include/vixl/pool-manager-impl.h
  include/vixl/pool-manager.h
  include/vixl/utils-vixl.h
  src/code-buffer-vixl.cc
  src/compiler-intrinsics-vixl.cc
  src/cpu-features.cc
  src/utils-vixl.cc
)

target_include_directories(vixl PUBLIC
  ${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_include_directories(vixl PRIVATE
  ${CMAKE_CURRENT_SOURCE_DIR}/include/vixl
)
target_compile_definitions(vixl PUBLIC
  VIXL_CODE_BUFFER_MALLOC
)

if(CPU_ARCH_ARM32)
  target_sources(vixl PRIVATE
    include/vixl/aarch32/assembler-aarch32.h
    include/vixl/aarch32/constants-aarch32.h
    include/vixl/aarch32/disasm-aarch32.h
    include/vixl/aarch32/instructions-aarch32.h
    include/vixl/aarch32/location-aarch32.h
    include/vixl/aarch32/macro-assembler-aarch32.h
    include/vixl/aarch32/operands-aarch32.h
    src/aarch32/assembler-aarch32.cc
    src/aarch32/constants-aarch32.cc
    src/aarch32/disasm-aarch32.cc
    src/aarch32/instructions-aarch32.cc
    src/aarch32/location-aarch32.cc
    src/aarch32/macro-assembler-aarch32.cc
    src/aarch32/operands-aarch32.cc
  )
  target_include_directories(vixl PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/include/vixl/aarch32
  )
  target_compile_definitions(vixl PUBLIC
    VIXL_INCLUDE_TARGET_A32
  )
endif()

if(CPU_ARCH_ARM64)
  target_sources(vixl PRIVATE
    include/vixl/aarch64/abi-aarch64.h
    include/vixl/aarch64/assembler-aarch64.h
    include/vixl/aarch64/constants-aarch64.h
    include/vixl/aarch64/cpu-aarch64.h
    include/vixl/aarch64/cpu-features-auditor-aarch64.h
    include/vixl/aarch64/debugger-aarch64.h
    include/vixl/aarch64/decoder-aarch64.h
    include/vixl/aarch64/decoder-constants-aarch64.h
    include/vixl/aarch64/decoder-visitor-map-aarch64.h
    include/vixl/aarch64/disasm-aarch64.h
    include/vixl/aarch64/instructions-aarch64.h
    include/vixl/aarch64/macro-assembler-aarch64.h
    include/vixl/aarch64/operands-aarch64.h
    include/vixl/aarch64/registers-aarch64.h
    include/vixl/aarch64/simulator-aarch64.h
    include/vixl/aarch64/simulator-constants-aarch64.h
    src/aarch64/assembler-aarch64.cc
    src/aarch64/assembler-sve-aarch64.cc
    src/aarch64/cpu-aarch64.cc
    src/aarch64/cpu-features-auditor-aarch64.cc
    src/aarch64/decoder-aarch64.cc
    src/aarch64/disasm-aarch64.cc
    src/aarch64/instructions-aarch64.cc
    src/aarch64/logic-aarch64.cc
    src/aarch64/macro-assembler-aarch64.cc
    src/aarch64/macro-assembler-sve-aarch64.cc
    src/aarch64/operands-aarch64.cc
    src/aarch64/pointer-auth-aarch64.cc
    src/aarch64/registers-aarch64.cc
  )
  target_include_directories(vixl PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/include/vixl/aarch64
  )
  target_compile_definitions(vixl PUBLIC
    VIXL_INCLUDE_TARGET_A64
  )
endif()

# Currently disabled becuase the old rec sucks.
#if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
#  message("Enabling vixl debug assertions")
#  target_compile_definitions(vixl PUBLIC VIXL_DEBUG)
#endif()
